package mylogger

import (
	"fmt"
	"os"
	"time"
)

// 网终端打印日志

type ConsoleLogger struct {
	Level Level
}

// NewFileLogger 定义一个日志文件结构体的构造函数
func NewConsoleLogger(levelStr string) *ConsoleLogger {
	logLevel := paeseLogLevel(levelStr)
	cl := &ConsoleLogger{
		Level:logLevel,
	}
	return cl
}

// 将公用的记录日志的功能封装成一个方法
func (c *ConsoleLogger) log(level Level,format string, args ...interface{})  {
	if c.Level > level{  //
		return
	}
	msg := fmt.Sprintf(format, args... )  //得到用户要记录的日志
	// 日志格式： [时间] [文件:行号] [函数名] [日志级别] 日志信息
	nowStr := time.Now().Format("2006-01-02 15:04:05.000")
	fileName, funcName, line := getCallerInfo(3)  // 获取文件名 函数名 行号
	logLevelStr := getLevelStr(level)
	logMsg := fmt.Sprintf("[%s] [%s:%d] [%s] [%s] %s",
		nowStr,fileName,line,funcName,logLevelStr,msg)
	fmt.Fprintln(os.Stdout,logMsg)  // 利用fmt包将msg子服装写入f.file文件中
}

// Debug debug方法
func (c *ConsoleLogger) Debug(format string, args ...interface{})  {
	c.log(DebugLevel,format, args...)
}

// Info info级别日志
func (c *ConsoleLogger) Info(format string, args ...interface{})  {
	c.log(InfoLevel,format, args...)
}

// Warning warning级别日志
func (c *ConsoleLogger) Warning(format string, args ...interface{})  {
	c.log(WarningLevel,format,args...)
}

// Error warning级别日志
func (c *ConsoleLogger) Error(format string, args ...interface{})  {
	c.log(ErrorLevel,format,args...)
}

// Fatal fatal级别日志
func (c *ConsoleLogger) Fatal(format string, args ...interface{})  {
	c.log(FatalLevel,format,args...)
}
// Close 终端标注输出不要关闭
func (c *ConsoleLogger) Close()  {

}
